package com.zw.a.basic.a13.demo12_executors;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

//案例: 演示线程池入门.
/*
    线程池简介:
        就是一个池子(容器), 里边有一些线程对象, 用的时候从里边拿, 用完之后再放回去.
        这样做的目的是: 节约资源, 提高效率.
    涉及到的API:
        线程池工厂类:  Executors
            public static ExecutorService newFixedThreadPool(int nThreads);  创建线程池, 并指定对应个数的线程对象.
        ExecutorService: 线程池接口
            public Future submit(Runnable task);        提交任务, 由线程池自动分配线程对象, 来执行该任务, 任务执行完毕后, 线程对象会被自动回收.
            public void shutdown()                      关闭线程池.

 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        //1. 创建线程池对象.
        ExecutorService service = Executors.newFixedThreadPool(5);

        //2. 提交任务.
        Future<?> future = service.submit(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println("我是Runnable接口的子类对象,   线程池方式实现..." + i);
                }
            }
        });

        //打印Runnable接口任务执行结束后的返回值.  返回值是null
        System.out.println(future.get());

        //3. 关闭线程池.
        service.shutdown();

    }
}
